<?php
/**
 * 消息模板控制器
 */

declare (strict_types = 1);

namespace app\controller\home;

use app\BaseController;
use think\facade\Db;
use think\facade\Request;

class Template extends BaseController
{
    /**
     * 获取消息模板列表（向后兼容方法）
     */
    public function index()
    {
        return $this->list();
    }
    
    /**
     * 获取消息模板列表
     */
    public function list()
    {
        $param = Request::param();
        $page = isset($param['page']) ? (int)$param['page'] : 1;
        $limit = isset($param['limit']) ? (int)$param['limit'] : 10;
        
        // 构建查询条件
        $where = [];
        $where[] = ['delete_time', '=', 0];
        
        // 关键词搜索
        if (!empty($param['keywords'])) {
            $where[] = ['id|name|code', 'like', '%' . trim($param['keywords']) . '%'];
        }
        
        try {
            // 查询模板列表，联表获取创建人信息
            $list = Db::name('template')
                ->alias('t')
                ->join('admin a', 't.admin_id = a.id', 'LEFT')
                ->where($where)
                ->field('t.*, a.name as admin_name')
                ->page($page, $limit)
                ->order('t.id', 'desc')
                ->select()
                ->toArray();
            
            // 查询总数
            $count = Db::name('template')
                ->where($where)
                ->count();
            
            // 按项目规范，不进行时间格式化，直接返回原始时间戳
            
            return json([
                'code' => 0,
                'msg' => 'success',
                'data' => $list,
                'count' => $count
            ]);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '查询失败: ' . $e->getMessage()]);
        }
    }
    
    /**
     * 查看消息模板详情
     */
    public function view()
    {
        try {
            $param = Request::param();
            
            if (empty($param['id'])) {
                return json(['code' => 400, 'msg' => '参数错误']);
            }
            
            // 查询模板详情
            $template = Db::name('template')
                ->where('id', $param['id'])
                ->where('delete_time', 0)
                ->find();
            
            if (empty($template)) {
                return json(['code' => 404, 'msg' => '消息模板不存在']);
            }
            
            // 按项目规范，不进行时间格式化，直接返回原始时间戳
            
            return json([
                'code' => 0,
                'msg' => 'success',
                'data' => $template
            ]);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '查询失败: ' . $e->getMessage()]);
        }
    }
    
    /**
     * 新增消息模板
     */
    public function add()
    {
        try {
            $param = Request::param();
            
            // 数据验证
            if (empty($param['title'])) {
                return json(['code' => 400, 'msg' => '模板名称不能为空']);
            }
            
            if (empty($param['name'])) {
                return json(['code' => 400, 'msg' => '模板标识不能为空']);
            }
            
            // 检查模板标识是否已存在
            $exist = Db::name('template')
                ->where('name', $param['name'])
                ->where('delete_time', 0)
                ->find();
            
            if ($exist) {
                return json(['code' => 400, 'msg' => '模板标识已存在']);
            }
            
            $data = [
                'title' => $param['title'],
                'name' => $param['name'],
                'msg_title' => $param['msg_title'] ?? '',
                'msg_link' => $param['msg_link'] ?? '',
                'msg_content' => $param['msg_content'] ?? '',
                'create_time' => time(),
                'update_time' => time()
            ];
            
            // 新增消息模板
            $templateId = Db::name('template')->insertGetId($data);
            
            return json(['code' => 0, 'msg' => '保存成功', 'data' => ['id' => $templateId]]);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '保存失败: ' . $e->getMessage()]);
        }
    }
    
    /**
     * 编辑消息模板
     */
    public function edit()
    {
        try {
            $param = Request::param();
            
            // 数据验证
            if (empty($param['id'])) {
                return json(['code' => 400, 'msg' => '参数错误']);
            }
            
            if (empty($param['title'])) {
                return json(['code' => 400, 'msg' => '模板名称不能为空']);
            }
            
            if (empty($param['name'])) {
                return json(['code' => 400, 'msg' => '模板标识不能为空']);
            }
            
            // 检查消息模板是否存在
            $template = Db::name('template')
                ->where('id', $param['id'])
                ->where('delete_time', 0)
                ->find();
            
            if (empty($template)) {
                return json(['code' => 404, 'msg' => '消息模板不存在']);
            }
            
            // 检查模板标识是否已存在（排除自己）
            $exist = Db::name('template')
                ->where('name', $param['name'])
                ->where('id', '<>', $param['id'])
                ->where('delete_time', 0)
                ->find();
            
            if ($exist) {
                return json(['code' => 400, 'msg' => '模板标识已存在']);
            }
            
            $data = [
                'id' => $param['id'],
                'title' => $param['title'],
                'name' => $param['name'],
                'msg_title' => $param['msg_title'] ?? $template['msg_title'],
                'msg_link' => $param['msg_link'] ?? $template['msg_link'],
                'msg_content' => $param['msg_content'] ?? $template['msg_content'],
                'update_time' => time()
            ];
            
            // 更新消息模板
            Db::name('template')->update($data);
            
            return json(['code' => 0, 'msg' => '更新成功', 'data' => ['id' => $param['id']]]);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '更新失败: ' . $e->getMessage()]);
        }
    }
    
    /**
     * 删除消息模板
     */
    public function del()
    {
        try {
            $param = Request::param();
            
            if (empty($param['id'])) {
                return json(['code' => 400, 'msg' => '参数错误']);
            }
            
            // 检查消息模板是否存在
            $template = Db::name('template')
                ->where('id', $param['id'])
                ->where('delete_time', 0)
                ->find();
            
            if (empty($template)) {
                return json(['code' => 404, 'msg' => '消息模板不存在']);
            }
            
            // 软删除消息模板
            Db::name('template')
                ->where('id', $param['id'])
                ->update([
                    'delete_time' => time(),
                    'update_time' => time()
                ]);
            
            return json(['code' => 0, 'msg' => '删除成功']);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '删除失败: ' . $e->getMessage()]);
        }
    }
    
    /**
     * 设置消息模板状态
     */
    public function set_status()
    {
        try {
            $param = Request::param();
            
            if (empty($param['id'])) {
                return json(['code' => 400, 'msg' => '参数错误']);
            }
            
            // 检查消息模板是否存在
            $template = Db::name('template')
                ->where('id', $param['id'])
                ->where('delete_time', 0)
                ->find();
            
            if (empty($template)) {
                return json(['code' => 404, 'msg' => '消息模板不存在']);
            }
            
            $status = isset($param['status']) ? (int)$param['status'] : 0;
            
            // 更新消息模板状态
            Db::name('template')
                ->where('id', $param['id'])
                ->update([
                    'status' => $status,
                    'update_time' => time()
                ]);
            
            return json(['code' => 0, 'msg' => $status === 1 ? '启用成功' : '禁用成功']);
        } catch (\Exception $e) {
            return json(['code' => 500, 'msg' => '操作失败: ' . $e->getMessage()]);
        }
    }
    
    /**
     * 向后兼容方法：获取消息模板列表
     */
    public function datalist()
    {
        return $this->list();
    }
}